package com.sisgesbyte.dao.ventas;

import java.util.List;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.utilDao.CreaFiltroSqlString;
import com.sisgesbyte.data.entity.ventas.VendedorClienteEntity;
import com.sisgesbyte.data.util.AbstractFacade;

@Stateless
public class MantVendedorClienteDaoImpl extends
		AbstractFacade<VendedorClienteEntity> implements MantVendedorClienteDao {

	@Inject
	private CreaFiltroSqlString creaFiltroSqlString;

	@PersistenceContext(unitName = "SigesSiscompPU")
	private EntityManager em;

	@Override
	protected EntityManager getEntityManager() {
		return em;
	}

	public MantVendedorClienteDaoImpl() {
		super(VendedorClienteEntity.class);
	}

	@Override
	public List<VendedorClienteEntity> listaVendedorCliente(
			FiltrosSQLBean cadenaFiltros) {
		StringBuilder jpql = new StringBuilder();
		jpql.append("SELECT cv.id, cv.empleado_estructura_id,ee.zona_id zona_ffvv_id,cl.cod_local,co.num_doc, ");
		jpql.append("co.tipo_identificacion_id,co.razon_social,co.nombre,co.apellido, cv.cliente_id, ");
		jpql.append("c.categoria_cliente_id, cv.cliente_locales_id,cl.zona_id zona_cliente_local_id, cv.active   ");
		jpql.append("FROM ventas.vendedor_cliente cv  ");
		jpql.append("inner join ventas.cliente c on cv.cliente_id=c.id  ");
		jpql.append("inner join comun.comun_objeto co  on c.comun_objeto_id = co.id ");
		jpql.append("inner join ventas.cliente_locales cl on cv.cliente_locales_id = cl.id ");
		jpql.append("inner join ventas.empleado_estructura ee on cv.empleado_estructura_id=ee.id  ");
		// concatenamos el filtro
		if (cadenaFiltros != null) {
			StringBuilder filtro = new StringBuilder();
			filtro.append(creaFiltroSqlString.concatenar(cadenaFiltros));
			jpql.append(filtro.toString());
		}
		Query query = em.createNativeQuery(jpql.toString(),
				VendedorClienteEntity.class);
		if (cadenaFiltros != null && cadenaFiltros.getListaValores() != null
				&& cadenaFiltros.getListaValores().size() > 0) {
			int num = 0;
			for (Object valor : cadenaFiltros.getListaValores()) {
				query.setParameter(++num, valor);

			}
		}
		List<VendedorClienteEntity> ls = query.getResultList();

		return ls;
	}

}
